﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProjetoBo.cs;
using ProjetoBe.cs;
using System.IO;


namespace ProjetoForm.Controles
{
    public partial class Relatorios : UserControl
    {
        RelatorioPesquisaBo PesquisaBo = new RelatorioPesquisaBo();
        RelatorioFinanceiroBo FinanceiroBo = new RelatorioFinanceiroBo();

        public FlowLayoutPanel Conteudo { get; private set; }
        public Relatorios(FlowLayoutPanel conteudo)
        {
            InitializeComponent();
            Conteudo = conteudo;
        }

        #region Botoes

        private void button1_Click(object sender, EventArgs e)
        {

            panel_financeiro.Visible = false;
            panel_pesquisa.Visible = true;
            lbl_nomepesquisa.Text = "";
            lbl_resp1.Text = "";
            lbl_resp2.Text = "";
            lbl_resp3.Text = "";
            date_ate.Text = string.Empty;
            date_de.Text = string.Empty;
            txt_arquivo.Text = string.Empty;
            combo_nome.Text = string.Empty;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            panel_pesquisa.Visible = false;
            panel_financeiro.Visible = true;
            date_de_finceiro.Text = string.Empty;
            date_ate_financeiro.Text = string.Empty;
            com_box_mes.Text = string.Empty;
            combo_ano.Text = string.Empty;
            txt_arquivo_fin.Text = "";
            group_mes.Visible = false;
            group_periodo.Visible = false;
            check_desconto.Checked = true;
            check_ingresso.Checked = true;

        }

        private void btn_home_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            Forms.controleMenuHomeAdmin = new menuHomeAdmin(Conteudo);
            Conteudo.Controls.Add(Forms.controleMenuHomeAdmin);
            Forms.controleMenuHomeAdmin.Visible = true;

            panel_pesquisa.Visible = false;
            panel_financeiro.Visible = false;

            this.Refresh();
        }

        #endregion

        #region Relatório Pesquisa

        public void InserirDadosRelatorio(List<int> ListaRespostas, DateTime data, StreamWriter valor, bool arquivo)
        {
            if (arquivo)
            {
                //implementação dos numeros no TXT. 
                valor.WriteLine("Data - " + data + "\n");

                int a = ListaRespostas[0];
                int b = ListaRespostas[1];
                int c = ListaRespostas[2];

                valor.WriteLine("Resposta A: " + a + "  Resposta B: " + b + "  Resposta C: " + c + "\n");
                valor.WriteLine();
            }
            else
            {
                //implementação dos numeros no xls. 
                valor.Write("\t" + data + "\t");

                int a = ListaRespostas[0];
                int b = ListaRespostas[1];
                int c = ListaRespostas[2];

                valor.WriteLine("Resposta A: " + a + "  \t Resposta B: " + b + " \t Resposta C: " + c + "\t");
                valor.WriteLine();
            }
        }

        private void btn_gerar_Click_1(object sender, EventArgs e)
        {
            DateTime data1, data2;
            DateTime.TryParse(date_de.Text.ToString(), out data1);
            DateTime.TryParse(date_ate.Text.ToString(), out data2);


            if (data1 <= data2)
            {

                if (lbl_nomepesquisa.Text != "")
                {
                    List<int> ListaResposta = new List<int>();
                    //Abrir o arquivo 
                    if (txt_arquivo.Text == "")
                        txt_arquivo.Text = "relatoriopesquisa";
                    string caminho;
                    bool arquivo;
                    if (radio_txt.Checked == true)
                    {
                        caminho = "C:\\P.I\\" + txt_arquivo.Text + ".txt";
                        arquivo = true;
                    }
                    else
                    {
                        caminho = "C:\\P.I\\" + txt_arquivo.Text + ".xls";
                        arquivo = false;
                    }

                    StreamWriter valor = new StreamWriter(caminho, true, Encoding.ASCII);

                    DateTime dateDe = Convert.ToDateTime(date_de.Text);
                    DateTime dateAte = Convert.ToDateTime(date_ate.Text);
                    int idPesquisa = Convert.ToInt32(lbl_id.Text);

                    valor.WriteLine("Pesquisa:");
                    valor.WriteLine("Pergunta: " + lbl_nomepesquisa.Text);
                    valor.WriteLine("Resposta A: " + lbl_resp1.Text);
                    valor.WriteLine(" Resposta B: " + lbl_resp2.Text);
                    valor.WriteLine(" Resposta C: " + lbl_resp3.Text);
                    valor.WriteLine();

                    int i = -1;
                    ListaResposta = PesquisaBo.trazerResposta(idPesquisa, dateDe);
                    InserirDadosRelatorio(ListaResposta, dateDe, valor, arquivo);
                    i = DateTime.Compare(dateDe, dateAte);

                    while (i != 0)
                    {
                        dateDe = dateDe.AddDays(1);
                        ListaResposta = PesquisaBo.trazerResposta(idPesquisa, dateDe);
                        InserirDadosRelatorio(ListaResposta, dateDe, valor, arquivo);
                        i = DateTime.Compare(dateDe, dateAte);
                    }
                    //Fecha o arquivo
                    valor.Close();
                    if (arquivo)
                        MessageBox.Show("O relatório .txt foi gerado e esta na pasta P.I do C:");
                    else
                        MessageBox.Show("O relatório .xls foi gerado e esta na pasta P.I do C:");
                    panel_pesquisa.Visible = false;
                }
                else
                {
                    MessageBox.Show("Selecione uma pergunta");
                }
            }
            else
            {
                MessageBox.Show("Validação !!! A data de pesquisa (De) é maior que data de pesquisa (Ate)");

            }

        }

        private void combo_nome_SelectedValueChanged_1(object sender, EventArgs e)
        {

            PesquisaBe pesquisa = new PesquisaBe();
            pesquisa = PesquisaBo.dadosPesquisa(combo_nome.SelectedItem.ToString());
            label9.Visible = true;
            lbl_nomepesquisa.Text = pesquisa.pergunta;
            lbl_resp1.Text = pesquisa.respostaUm;
            lbl_resp2.Text = pesquisa.respostaDois;
            lbl_id.Text = pesquisa.id.ToString();


            if (pesquisa.respostaTres == "")
            {
                label9.Visible = false;
                lbl_resp3.Text = "";
            }
            else
                lbl_resp3.Text = pesquisa.respostaTres;
        }

        private void combo_nome_Click_1(object sender, EventArgs e)
        {
            combo_nome.Items.Clear();
            string sql = "";

            if (check_ativo.Checked == true)
                sql = "SELECT PERGUNTA FROM PESQUISA WHERE ATIVAR = 'S'";

            else
                sql = "SELECT PERGUNTA FROM PESQUISA";

            List<string> listapesquisas = new List<string>();
            listapesquisas = PesquisaBo.selecionarPesquisa(sql);
            combo_nome.Text = "Selecione aqui";

            foreach (string i in listapesquisas)
                combo_nome.Items.Add(i);
        }

        #endregion // Não esta funcionando ainda

        #region Relatório Financeiro (NÃO FUNCIONA AINDA)

        private void gerar_relatorio_financeiro_Click(object sender, EventArgs e)
        {
            if (radio_mes.Checked == true)
            {
                List<DateTime> listDatas = new List<DateTime>();

                object ano = combo_ano.SelectedItem;
                object mes = com_box_mes.SelectedItem;
                if (mes == null || ano == null)
                {
                    MessageBox.Show("Selecione um mês ou um ano");
                }
                else
                {
                    listDatas = ValidarMes(mes.ToString(), ano.ToString());

                    BuscaRelatorio(listDatas[0], listDatas[1]);

                }

            }
            if (radio_periodo.Checked == true)
            {
                DateTime data1, data2;
                DateTime.TryParse(date_de_finceiro.Text.ToString(), out data1);
                DateTime.TryParse(date_ate_financeiro.Text.ToString(), out data2);


                if (data1 <= data2)
                {
                    BuscaRelatorio(Convert.ToDateTime(date_de_finceiro.Text), Convert.ToDateTime(date_ate_financeiro.Text));

                }
                else
                {
                    MessageBox.Show("A data de pesquisa (De) é maior que data de pesquisa (Ate)");
                }
            }
        }

        public List<DateTime> ValidarMes(string mes, string ano)
        {
            List<DateTime> listDatas = new List<DateTime>();


            DateTime x;
            string data = "15/04/1993";
            x = Convert.ToDateTime(data);


            DateTime data1 = new DateTime(2007, 1, 21);


            switch (mes)
            {
                case "Janeiro":
                    listDatas.Add(Convert.ToDateTime("01/01/" + ano));
                    listDatas.Add(Convert.ToDateTime("31/01/" + ano));
                    break;
                case "Fevereiro":
                    listDatas.Add(Convert.ToDateTime("01/02/" + ano));
                    listDatas.Add(Convert.ToDateTime("29/02/" + ano));
                    break;
                case "Março":
                    listDatas.Add(Convert.ToDateTime("01/03/" + ano));
                    listDatas.Add(Convert.ToDateTime("31/03/" + ano));
                    break;
                case "Abril":
                    listDatas.Add(Convert.ToDateTime("01/04/" + ano));
                    listDatas.Add(Convert.ToDateTime("30/04/" + ano));
                    break;
                case "Maio":
                    listDatas.Add(Convert.ToDateTime("01/05/" + ano));
                    listDatas.Add(Convert.ToDateTime("31/05/" + ano));
                    break;
                case "Junho":
                    listDatas.Add(Convert.ToDateTime("01/06/" + ano));
                    listDatas.Add(Convert.ToDateTime("30/06/" + ano));
                    break;
                case "Julho":
                    listDatas.Add(Convert.ToDateTime("01/07/" + ano));
                    listDatas.Add(Convert.ToDateTime("31/07/" + ano));
                    break;
                case "Agosto":
                    listDatas.Add(Convert.ToDateTime("01/08/" + ano));
                    listDatas.Add(Convert.ToDateTime("31/08/" + ano));
                    break;
                case "Setembro":
                    listDatas.Add(Convert.ToDateTime("01/09/" + ano));
                    listDatas.Add(Convert.ToDateTime("30/09/" + ano));
                    break;
                case "Outubro":
                    listDatas.Add(Convert.ToDateTime("01/10/" + ano));
                    listDatas.Add(Convert.ToDateTime("31/10/" + ano));
                    break;
                case "Novembro":
                    listDatas.Add(Convert.ToDateTime("01/11/" + ano));
                    listDatas.Add(Convert.ToDateTime("30/11/" + ano));
                    break;
                case "Dezembro":
                    listDatas.Add(Convert.ToDateTime("01/12/" + ano));
                    listDatas.Add(Convert.ToDateTime("31/12/" + ano));
                    break;
            }
            return listDatas;
        }

        public void BuscaRelatorio(DateTime data_de, DateTime data_ate)
        {
            List<string> listRetornoBusca = new List<string>();
            //Abrir o arquivo 
            if (txt_arquivo_fin.Text == "")
                txt_arquivo_fin.Text = "relatoriofinanceiro";

            string caminho;

            caminho = "C:\\P.I\\" + txt_arquivo_fin.Text + ".xls";

            StreamWriter valor = new StreamWriter(caminho, true, Encoding.ASCII);

            valor.Write("Data\t ");
            valor.Write("Valor total\t ");

            bool desconto = false;
            bool ingresso = false;

            if (check_desconto.Checked == true)
            {
                desconto = true;
                valor.Write("Total Desconto\t ");
            }

            if (check_ingresso.Checked == true)
            {
                ingresso = true;
                valor.Write("Numero de ingressos vendidos\t ");
            }

            valor.WriteLine();

            int i = -1;
            decimal total = 0;
            listRetornoBusca = FinanceiroBo.buscarPesquisa(data_de);
            InserirDadosFinanceiro(listRetornoBusca, desconto, ingresso, valor);
            total = Convert.ToDecimal(listRetornoBusca[1]);

            i = DateTime.Compare(data_de, data_ate);

            while (i != 0)
            {
                data_de = data_de.AddDays(1);
                listRetornoBusca = FinanceiroBo.buscarPesquisa(data_de);
                InserirDadosFinanceiro(listRetornoBusca, desconto, ingresso, valor);
                total = total + Convert.ToDecimal(listRetornoBusca[1]);
                i = DateTime.Compare(data_de, data_ate);
            }
            valor.WriteLine("");
            valor.WriteLine("");
            valor.WriteLine("Valor Total do periodo\t" + total);

            valor.Close();

            MessageBox.Show("O relatório .xls foi gerado e esta na pasta P.I do C:");

            panel_financeiro.Visible = false;

        }

        public void InserirDadosFinanceiro(List<string> ListRetorno, bool desconto, bool ingresso, StreamWriter valor)
        {
            valor.WriteLine("");
            valor.Write(ListRetorno[0] + "\t");
            valor.Write(ListRetorno[1] + "\t");

            if (desconto)
                valor.Write(ListRetorno[2] + "\t");
            if (ingresso)
                valor.Write(ListRetorno[3] + "\t");

        }

        private void radio_mes_CheckedChanged(object sender, EventArgs e)
        {
            group_mes.Visible = true;
            group_periodo.Visible = false;
        }

        private void radio_periodo_CheckedChanged(object sender, EventArgs e)
        {
            group_mes.Visible = false;
            group_periodo.Visible = true;
        }

        #endregion
    }
}
